About the Data

From the EPA: “The National Walkability Index is a nationwide geographic data resource that ranks block groups according to their relative walkability. The national dataset includes walkability scores for all block groups as well as the underlying attributes that are used to rank the block groups.”

National Walkability Index

The Walkability Index is based on measures of the built environment derived from EPA’s Smart Location Database. The Index is calculated as a function of block rankings on a series of indicators:

\[ Walkability \space Index = \left(\frac{w}{3}\right) + \left(\frac{x}{3}\right) + \left(\frac{y}{3}\right) + \left(\frac{z}{6}\right)\]

Where

  • \(w\) = block group’s ranked score for intersection density
  • \(x\) = block group’s ranked score for proximity to transit stops
  • \(y\) = block group’s ranked score for employment mix
  • \(z\) = block group’s ranked score for employment and household mix

For more, see the EPA’s “National Walkability Index Methodology and User Guide”.

Variable Description

glimpse(walk)
## Rows: 155
## Columns: 16
## $ FIPS_TRACT           <dbl> 51540000502, 51540000502, 51540000502, 5154000050…
## $ FIPS_BLKGP           <chr> "515400005022", "515400005023", "515400005024", "…
## $ STATEFP              <dbl> 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 5…
## $ COUNTYFP             <chr> "540", "540", "540", "540", "540", "540", "540", …
## $ TRACTCE              <chr> "000502", "000502", "000502", "000502", "000600",…
## $ BLKGRPCE             <dbl> 2, 3, 4, 5, 1, 2, 3, 2, 3, 4, 1, 5, 3, 3, 1, 4, 2…
## $ intersection_density <dbl> 75.554437, 52.477706, 64.177938, 60.630232, 146.6…
## $ proximity_transit    <dbl> 527.06, 325.89, 236.04, 544.49, 319.19, 693.36, 8…
## $ employment_mix       <dbl> 0.53865306, 0.51282003, 0.10395780, 0.66573695, 0…
## $ emp_housing_mix      <dbl> 0.1937425, 0.3625699, 0.5550809, 0.8216670, 0.175…
## $ emp_hou_mix_rank     <dbl> 3, 6, 12, 19, 2, 16, 10, 15, 17, 10, 17, 7, 19, 5…
## $ emp_mix_rank         <dbl> 9, 9, 2, 14, 1, 3, 3, 12, 14, 17, 20, 9, 14, 9, 2…
## $ int_density_rank     <dbl> 12, 10, 11, 11, 17, 18, 12, 15, 5, 4, 5, 6, 6, 2,…
## $ prox_transit_rank    <dbl> 15, 17, 19, 15, 17, 14, 13, 14, 1, 1, 1, 1, 1, 1,…
## $ walkability_index    <dbl> 11.000000, 11.500000, 12.333333, 14.166667, 11.83…
## $ walkability_bins     <chr> "Above Average Walkable", "Above Average Walkable…
  • walkability_index: National Walkability Index score
  • walkability_bins: National Walkability Index Bins; 1-5.75 = Least Walkable, 5.76-10.5 = Below Average Walkable, 10.51-15.25 = Above Average Walkable, 15.26-20 = Most Walkable
  • intersection_density: Street intersection density (pedestrian-oriented intersections); Higher intersection density is correlated with more walk trips
  • int_density_rank: Resulting rank of block group for intersection_density within all block groups; range from 1-20, higher ranks indicate more walk trip likelihood
  • proximity_transit: Proximity to transit stops, measured in meters from population-weighted centroid of block group to nearest transit stop (areas with no transit stops are missing)
  • prox_transit_rank: Resulting rank of block group for prox_transit_rank within all block groups; range from 1-20,higher ranks indicate more walk trip likelihood (areas with no transit access are ranked the lowest)
  • employment_mix: The mix of employment types in a block group (such as retail, office, or industrial); higher values correlate with more walk trips
  • emp_mix_rank: Resulting rank of block group for employment_mix within all block groups; range from 1-20, higher ranks indicate more walk trip likelihood
  • emp_housing_mix: The mix of employment types and occupied housing; A block group with a diverse set of employment types (such as office, retail, and service) plus a large quantity of occupied housing units will have a relatively high value. Higher values correlate with more walk trips
  • emp_hou_mix_rank: Resulting rank of block group for emp_housing_mix within all block groups; range from 1-20, higher ranks indicate more walk trip likelihood
  • FIPS_TRACT: Combined Tract FIPS code (11 characters)
  • FIPS_BLKGP: Combined Block Group FIPS code (11 characters)
  • STATEFP: State FIPS code (2 characters)
  • COUNTYFP: County FIPS code (3 characters)
  • TRACTCE: TractFIPS code (6 characters)
  • BLKGRPCE: Block Group FIPS code (1 character)

Summaries

Five-number summaries of all variables:

walk %>% select(intersection_density:walkability_bins) %>% 
  as.data.frame() %>% 
  stargazer(., type = "text", title = "Summary Statistics", digits = 0,
            summary.stat = c("mean", "sd", "min", "median", "max"))
## 
## Summary Statistics
## ===================================================
## Statistic            Mean St. Dev. Min Median  Max 
## ---------------------------------------------------
## intersection_density  48     78     1    12    601 
## proximity_transit    448    262     0   386   1,140
## employment_mix        1      0      0    1      1  
## emp_housing_mix       1      0      0    1      1  
## emp_hou_mix_rank      11     5      1    11    20  
## emp_mix_rank          11     6      1    11    20  
## int_density_rank      8      5      1    5     20  
## prox_transit_rank     7      8      1    1     20  
## walkability_index     8      4      3    7     20  
## ---------------------------------------------------

Visual Distributions

walk %>% 
  select(FIPS_BLKGP, walkability_index, intersection_density, proximity_transit, employment_mix, emp_housing_mix) %>% 
  pivot_longer(-FIPS_BLKGP, names_to = "measure", values_to = "value") %>% 
  ggplot(aes(x = value, fill = measure)) + 
  geom_histogram() + 
  facet_wrap(~measure, scales = "free")  +
  guides(fill = "none")

meta %>% 
  filter(varname %in% c("walkability_index", "intersection_density",
                        "proximity_transit", "employment_mix", 
                        "emp_housing_mix")) %>%
  mutate(label = paste0(varname, ": ", about)) %>% 
  select(label) %>% 
  as.list()
## $label
## [1] "intersection_density: Higher intersection density is correlated with more walk trips (derived from 2018 HERE maps NAVSTREETS)"                                                                                                                                           
## [2] "proximity_transit: Distance from population center to nearest transit stop in meters. Shorter distances correlate with more walk trips (areas with no transit stops are missing; dervied from 2020 GTFS, 2020 COTD)"                                                     
## [3] "employment_mix: Higher values correlate with more walk trips (derived from 2017 LEHD WAC)"                                                                                                                                                                               
## [4] "emp_housing_mix: A block group with a diverse set of employment types (such as office, retail, and service) plus a large quantity of occupied housing units will have a relatively high value. Higher values correlate with more walk trips (derived from 2017 LEHD WAC)"
## [5] "walkability_index: Calculated by weighted formula using results of indicator rank scores."

Walkability by Locality

walk %>% 
  ggplot(aes(x = walkability_index, fill = COUNTYFP)) + 
  geom_histogram() + 
  facet_wrap(~COUNTYFP, scales = "free")  +
  guides(fill = "none")

Spatial Distributions

Walkability

pal <- colorNumeric("plasma", reverse = TRUE, domain = cville_maps$walkability_index)

leaflet(cville_maps) %>%
  addProviderTiles("CartoDB.Positron") %>%
  addPolygons(data = cville_maps,
              fillColor = ~pal(walkability_index),
              weight = 1,
              opacity = 1,
              color = "white",
              fillOpacity = 0.6,
              highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
              popup = paste0("Tract Number: ", cville_maps$GEOID, "<br>",
                             "Walkability Index: ", round(cville_maps$walkability_index, 2))) %>%
  addLegend("bottomright", pal = pal, values = cville_maps$walkability_index,
            title = "Walkability Index", opacity = 0.7)

Intersection Density

pal <- colorNumeric("plasma", reverse = TRUE, domain = cville_maps$intersection_density)

leaflet(cville_maps) %>%
  addProviderTiles("CartoDB.Positron") %>%
  addPolygons(data = cville_maps,
              fillColor = ~pal(intersection_density),
              weight = 1,
              opacity = 1,
              color = "white",
              fillOpacity = 0.6,
              highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
              popup = paste0("Tract Number: ", cville_maps$GEOID, "<br>",
                             "Intersection Density: ", round(cville_maps$intersection_density, 2))) %>%
  addLegend("bottomright", pal = pal, values = cville_maps$intersection_density,
            title = "Intersection Density", opacity = 0.7)

Employment Mix

pal <- colorNumeric("plasma", reverse = TRUE, domain = cville_maps$employment_mix)

leaflet(cville_maps) %>%
  addProviderTiles("CartoDB.Positron") %>%
  addPolygons(data = cville_maps,
              fillColor = ~pal(employment_mix),
              weight = 1,
              opacity = 1,
              color = "white",
              fillOpacity = 0.6,
              highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
              popup = paste0("Tract Number: ", cville_maps$GEOID, "<br>",
                             "Employment Mix: ", round(cville_maps$employment_mix, 2))) %>%
  addLegend("bottomright", pal = pal, values = cville_maps$employment_mix,
            title = "Employment Mix", opacity = 0.7)

Employment-Housing Mix

pal <- colorNumeric("plasma", reverse = TRUE, domain = cville_maps$emp_housing_mix)

leaflet(cville_maps) %>%
  addProviderTiles("CartoDB.Positron") %>%
  addPolygons(data = cville_maps,
              fillColor = ~pal(emp_housing_mix),
              weight = 1,
              opacity = 1,
              color = "white",
              fillOpacity = 0.6,
              highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
              popup = paste0("Tract Number: ", cville_maps$GEOID, "<br>",
                             "Employment-Housing Mix: ", round(cville_maps$emp_housing_mix, 2))) %>%
  addLegend("bottomright", pal = pal, values = cville_maps$emp_housing_mix,
            title = "Employment-Housing Mix", opacity = 0.7)

Proportion Carpooling

pal <- colorNumeric("plasma", reverse = TRUE, domain = cville_maps$proximity_transit)

leaflet(cville_maps) %>%
  addProviderTiles("CartoDB.Positron") %>%
  addPolygons(data = cville_maps,
              fillColor = ~pal(proximity_transit),
              weight = 1,
              opacity = 1,
              color = "white",
              fillOpacity = 0.6,
              highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
              popup = paste0("Tract Number: ", cville_maps$GEOID, "<br>",
                             "Proximity to Transit: ", round(cville_maps$proximity_transit, 2))) %>%
  addLegend("bottomright", pal = pal, values = cville_maps$proximity_transit,
            title = "Proximity to Transit", opacity = 0.7)